//导入http
const http = require('http');
//导入fs(文件读写对象)
const fs = require('fs');
//导入path模块(用来获取后缀)
const path = require('path')
//定义mime对象
let mimes = {
    'html': 'text/html',
    'css': 'text/css',
    'js': 'text/js',
    'png': 'images/png',
    'jpg': 'images/jpg',
    'gif': 'images/gif',
    'mp4': 'video/mp4',
    'mp3': ';audio/mp3',
    'json': 'application/json',
}
// 创建server对象
const server = http.createServer((req, res) => {
    // 获取请求的方法
    let {method} = req;
    if (method!=='GET'){
        res.end('<h1>405 Method error!!</h1>')
        return;
    }
    //获取请求的url路径
    let {pathname} = new URL(req.url, 'http://127.0.0.1');
    // 如果请求的路径为'/'就复制为'/note.ejs'
    if (pathname==='/'){
        pathname='/note.ejs'
    }
    console.log(pathname)
    // 文件读取的路径
    let filepath = __dirname + pathname

    // 异步文件读取
    fs.readFile(filepath, (err, data) => {
        if (err) {
            res.setHeader('content-type', 'text/html;charset=utf-8')
            switch (err.code) {
                //文件没找到的错误
                case 'ENOENT':
                    res.statusCode = 404;
                    // 设置响应状态描述(不设置系统给默认值) 即 status Code:statusCode + statusMessage
                    res.statusMessage = 'Not Found!!!';
                    res.end('<h1>404 Not Found!!!</h1>');
                    break;
                //没权限时错误
                case 'EPERM':
                    res.statusCode = 403;
                    // 设置响应状态描述
                    res.statusMessage = 'Forbidden!!!';
                    res.end('<h1>403 Forbidden!!!</h1>');
                    break;
                default:
                    res.statusCode = 500;
                    // 设置响应状态描述
                    res.statusMessage = 'Internal Server Error!!';
                    res.end('<h1>500 Internal Server Error!!</h1>');
                    break;
            }
            return 0;
        }
        //获取文件的后缀名
        let extname = path.extname(filepath).slice(1);
        // 获取mime对象中的value类型
        let type = mimes[extname]
        // 判断设置头部类型
        if (type) {
            if (type === 'html') {
                // html头部设置了charset=utf-8  其他头部不需要在设置
                res.setHeader('content-type', type + ';charset=utf-8')
            } else {
                res.setHeader('content-type', type)
            }
        } else {
            res.setHeader('content-type', 'application/octet-stream')
        }
        // 设置响应体
        res.end(data);
    });
});

// 开启服务
server.listen(9000, () => {
    console.log('The service has already been opened!!!');
});